package com.org.action;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.org.bean.AdminInfoBean;
import com.org.service.ILoginService;
import com.org.utils.MyUtils;

@Controller
public class LoginAction {

	// 依赖注入【反转控制】
	// 面向接口的编程
	@Resource
	private ILoginService loginS;// 按名称匹配进行注入

	/**
	 * 说明： 如果在springmvc框架中需要使用request、response对象时，直接在方法的参数中声明该参数即可有springmvc进行注入；
	 * HttpServletRequest request, HttpServletReponse response
	 */

	/**
	 * springmvc框架中的ajax影响处理： 响应方法添加@ResponseBody注解； 响应方法的返回值为集合类型； 解析：
	 * 注解ResponseBody会使springmvc进行ajax的response响应处理；【类似于servlet中的使用printwriter写出json字符串】；
	 * 方法返回值类型为集合类型，springmvc框架会自动将该集合类型转换为json字符串响应给客户端；【需要在springmvc配置文件中进行配置】
	 */
	/**
	 * springmvc的ajax查询
	 * 
	 * @param adminB
	 * @return
	 */
	@ResponseBody
	@RequestMapping("AjaxQueryDemoAction")
	public List<AdminInfoBean> ajaxQueryDemo(AdminInfoBean adminB) {
		// 调用service层进行查询操作
		List<AdminInfoBean> lstAdmins = loginS.queryInfoByParams(adminB);
		// 直接返回查询结果集即可，springmvc框架自动将结果集转换为json字符串返回给客户端
		return lstAdmins;
	}

	/**
	 * 文件上传处理，MultipartFile file_adminimg变量用于接收form表单提交的字节流对象，通过该对象在后台进行文件保存处理即可
	 * 
	 * @param file_adminimg
	 * @param adminB
	 * @return
	 * @throws IOException
	 */
	@RequestMapping("/AdminInfoAddWithFile")
	public void addAdminInfoWithFile(HttpServletRequest request, AdminInfoBean adminB, HttpServletResponse response)
			throws IOException {

		// 调用utils的方法，进行文件上传处理
		MyUtils.uploadFilesWithRequest(request, adminB, "adminImgs", "amdinImg");

		// 进行文件保存处理
		int i = loginS.saveOrUpdateAdminInfo(adminB);
		// 调用service层的业务逻辑处理
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		// 根据service层操作结果进行跳转处理
		if (i > 0) {
			// 新增成功
			out.write(
					"<script>var isAdd=window.confirm('新增成功！是否继续增加？');if(isAdd){window.location.href='jump?pg=adminInfoManager/adminInfoAdd'; }else{window.location.href='jump?pg=welcome';}</script>");
		} else {
			// 新增失败
			out.write("<script>alert('新增修改失败！');window.location.href='jump?pg=welcome';</script>");
		}
	}

	@RequestMapping("/LoginAction")
	public String dologin(AdminInfoBean adminB, HttpServletRequest request) {
		// 调用service层进行登录业务逻辑处理
		System.out.println("用户名：" + adminB.getAdminname());
		System.out.println("密码：" + adminB.getAdminpsw());
		// 调用service层的业务逻辑处理
		List<AdminInfoBean> lstAdmins = loginS.queryLoginInfo(adminB);
		// 根据登录信息查询结果进行跳转处理
		if (lstAdmins != null && lstAdmins.size() > 0) {
			// 登录成功
			// 缓存登录账户的个人信息
			request.getSession().setAttribute("adminName", adminB.getAdminname());
			request.getSession().setAttribute("adminPsw", adminB.getAdminpsw());
			request.getSession().setAttribute("adminAddress", lstAdmins.get(0).getAdminaddress());
			request.getSession().setAttribute("adminTel", lstAdmins.get(0).getAdmintel());
			request.getSession().setAttribute("adminImg", lstAdmins.get(0).getAdminimg());
			request.getSession().setAttribute("adminId", lstAdmins.get(0).getAdminid());
			// 登陆成功后跳转到后台管理界面
			return "main";
		} else {
			// 登录失败继续跳转到登录界面
			return "../../index";
		}
		// 返回值是view的映射路径
		// 注意：返回的路径是剔除前缀和后缀之后的内容：
		// 例如返回视图页面的路径是：/WEB-INF/pages/index.jsp，则只需要返回 logined即可
	}

	/**
	 * 修改当前管理员账户密码
	 * 
	 * @param adminB
	 * @param response
	 * @throws IOException
	 */
	@RequestMapping("/ChangeAdminInfo")
	public void changeAdminInfo(HttpServletRequest request, AdminInfoBean adminB, HttpServletResponse response)
			throws IOException {
		// 调用utils的方法，进行文件上传处理
		MyUtils.uploadFilesWithRequest(request, adminB, "adminImgs", "amdinImg");
		// 进行文件保存处理，调用service层的业务逻辑处理
		int i = loginS.updateByPrimaryKeySelective(adminB);
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		if (i > 0) {
			// 新增成功则重新登录
			out.write("<script>alert('修改成功，请重新登录！');window.parent.location.href='jump?pg=login';</script>");
		} else {
			// 新增失败
			out.write("<script>window.location.href='jump?pg=accountInfoManager/changePsw';</script>");
		}
	}

	

}
